package com.zhx.common.websocket.service;

import com.zhx.common.websocket.domain.vo.resp.WSBaseResp;
import io.netty.channel.Channel;

public interface WebSocketService {

    /**
     * 保存channel连接
     * @param channel
     */
    void connect(Channel channel);

    /**
     * 前端请求扫码登陆的处理
     * @param channel
     */
    void handleLoginReq(Channel channel);

    /**
     * 用户登录成功，发送消息
     * @param code
     * @param id
     */
    void scanLoginSuccess(Integer code, Long id);

    /**
     * 客户端携带token进行登陆认证
     * @param channel 连接
     * @param token token
     */
    void authorize(Channel channel, String token);


    /**
     * 发送消息给所有在线用户
     * @param resp 消息
     * @param skipUid 跳过uid
     */
    void sendToAllOnline(WSBaseResp<?> resp, Long skipUid);

    /**
     * 推动消息给所有在线的人
     */
    void sendToAllOnline(WSBaseResp<?> wsBaseResp);

    /**
     * 给某个人发送消息
     */
    void sendToUid(WSBaseResp<?> wsBaseResp, Long uid);

    /**
     * 处理ws断开连接的事件
     */
    void remove(Channel channel);

    /**
     * 通知用户扫码成功
     *
     * @param code
     */
    Boolean scanSuccess(Integer code);
}
